package it.alb.calcolatrice;

import com.example.calcolatrice.R;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Calculator_Main extends Activity implements OnClickListener {

	private static final int IMPOSTAZIONI = 0;
    private static final int ESCI = 1;
    private static TextView display;
    private String operatore = "";
    public String numero = "";
    private static Context ctx;
    private String operatoreCorrente = "";
    private String valore = "";
    int contaParChiuse = 0;
    private char parAperta = '(';
    private char parChiusa = ')';
    int screenWidth;
    private static Handler handlerTimer = new Handler();
    String regex = "[^a-zA-Z]";
    private static Resources res;
	
	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		screenWidth = getWindow().getWindowManager().getDefaultDisplay().getWidth();
		ctx = getApplicationContext();
		res = getResources();
		setUpViews();
	}
    
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(Menu.NONE, IMPOSTAZIONI, Menu.NONE, "Impostazioni");
		menu.add(Menu.NONE, ESCI, Menu.NONE, "Esci");
	    return true;
	}
	
	public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	     	case 0:
		        startActivity(new Intent(this, Preferences.class));
	        return true;
	     	case 1:
	     		finish();
	        return true;
	        default:
	            return super.onOptionsItemSelected(item);
	    }
	}
	
	@Override
	public void onClick(View v) {
		
		int id = v.getId();
		try{
			if (Utility.calcolo == false) {
				valore= display.getText().toString();
			} else {
				if (id != R.id.somma && id != R.id.sottrazione && id != R.id.prodotto && id != R.id.divisione && id != R.id.chiudiPar
					&& id != R.id.apriPar && id != R.id.potenza && id != R.id.radq) {
					if (Utility.setResultType(ctx) == false){
						valore = "";
					}
					Utility.calcolo = false;
				} else {
					if (Utility.setResultType(ctx) == false){
						valore= display.getText().toString();
					}
					Utility.calcolo = false;
				}
			}

				if (id == R.id.uno) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "1");
					Utility.formattaCarattere(display);
					numero = "1";
				} else if (id == R.id.due) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "2");
					Utility.formattaCarattere(display);
					numero = "2";
				} else if (id == R.id.tre) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "3");
					Utility.formattaCarattere(display);
					numero = "3";
				} else if (id == R.id.quattro) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "4");
					Utility.formattaCarattere(display);
					numero = "4";
				} else if (id == R.id.cinque) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "5");
					Utility.formattaCarattere(display);
					numero = "5";
				} else if (id == R.id.sei) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "6");
					Utility.formattaCarattere(display);
					numero = "6";
				} else if (id == R.id.sette) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "7");
					Utility.formattaCarattere(display);
					numero = "7";
				} else if (id == R.id.otto) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "8");
					Utility.formattaCarattere(display);
					numero = "8";
				} else if (id == R.id.nove) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "9");
					Utility.formattaCarattere(display);
					numero = "9";
				} else if (id == R.id.zero) {
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					valore = display.getText().toString();
					display.setText(valore + "0");
					Utility.formattaCarattere(display);
					numero = "0";
				} else if (id == R.id.somma) {
					operatoreCorrente = "+";
					if (Utility.control(valore, id) == 1){
						operatore = "+";
						display.setText(valore+"+");
					}else {
						Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
						operatore = "+";
					}
					Utility.formattaCarattere(display);
				} else if (id == R.id.sottrazione) {
					operatoreCorrente = "-";
					if (Utility.control(valore, id) == 1){
						operatore = "-";
						display.setText(valore+"-");
					} else {
						Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
						operatore = "-";
					}
					Utility.formattaCarattere(display);
				} else if (id == R.id.prodotto) {
					operatoreCorrente = "*";
					if (Utility.control(valore, id) == 1){
						operatore = "*";
						display.setText(valore+"*");
					} else {
						Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
						operatore = "*";
					}
					Utility.formattaCarattere(display);
				} else if (id == R.id.divisione) {
					operatoreCorrente = "/";
					if (Utility.control(valore, id) == 1){
						operatore = "/";
						display.setText(valore+"/");
					} else {
						Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
						operatore = "/";	
					}
					Utility.formattaCarattere(display);
				} else if (id == R.id.apriPar) {
					operatore = "(";
					if (Utility.control(valore, id) == 3){
						Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					}
					Utility.formattaCarattere(display);
				} else if (id == R.id.chiudiPar) {
					if (Utility.control(valore, id) == 1){
						if(Utility.contaParChiuse(valore, parChiusa) < Utility.contaParAperte(valore, parAperta)) {
							display.setText(valore+")");
							numero = ")";
							Utility.parAperta = 0;
							Utility.parChiusa = 0;
						}
					}
					Utility.formattaCarattere(display);
				} else if (id == R.id.potenza) {
					operatoreCorrente = "^";
					if (Utility.control(valore, id) == 1){
						operatore = "^";
						display.setText(valore+"^");
					} else {
						Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
						operatore = "^";
					}
					Utility.formattaCarattere(display);
				} else if (id == R.id.uguale) {
					operatore = "=";
					if (valore.contains("/0")) {
		    			Toast toast = Toast.makeText(this, "Operazione non consentita", Toast.LENGTH_LONG);
		    			toast.setGravity(Gravity.CENTER, 0, 0);
		    			toast.show();
		    		} else {
		    			Utility.animation(display, screenWidth, 1, Utility.controlAnim(ctx));
//		    			Utility.animation(findViewById(R.id.Calculator_Main), screenWidth, 1, Utility.controlAnim(ctx));
//		    			handlerTimer.postDelayed(new Runnable(){
//		    		        public void run() {
		    		        	Utility.calcola(valore, display, ctx);
		    		        	numero = display.getText().toString();
		    					Utility.formattaCarattere(display);
//		    		      }}, 320);
		    		}
				} else if (id == R.id.C) {
					int l = valore.length();
					if (l!=0 && Utility.calcolo == false){
					    if (valore.endsWith("√(")) {
					    	String temp = valore.substring(0, l-2);
							display.setText(temp);
							Utility.formattaCarattere(display);
					    }else {
							String temp = valore.substring(0, l-1);
							display.setText(temp);
							Utility.formattaCarattere(display);
					    }
		    		}else {
		    			display.setText("");
		    		}
				} else if (id == R.id.CE) {
					display.setText("");
					operatore = "";
				} else if (id == R.id.virgola) {
						if (valore.equals("")){
	    					display.setText("0,");
	    				} else {
	    					if (Utility.control(valore, id) == 1) {
	    						String risultato = display.getText().toString();
	    						if (!operatore.equals("")) {
		    						String tmp = risultato.substring(risultato.lastIndexOf(operatore), risultato.length());
		    						if (!tmp.contains(",")) {
		    							display.setText(valore + ",");
		    						}
	    						} else {
	    							if (!risultato.contains(",")) {
	    								display.setText(valore + ",");
	    							}
	    						}
	    					}
	    				}
						Utility.formattaCarattere(display);
				} else if (id == R.id.radq) {
					operatore = "√(";
					Utility.controlOperatore(valore, operatore, display, id, operatoreCorrente, numero);
					Utility.formattaCarattere(display);
				}
		}catch (Exception e){
//			Toast toast = Toast.makeText(ctx, e.getMessage().toString(), Toast.LENGTH_LONG);
//	        toast.setGravity(Gravity.CENTER, 0, 0);
//	        toast.show();
		}
		
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Utility.setBackground(findViewById(R.id.Calculator_Main), ctx, res);
	}
	
	@Override
	public void onBackPressed() {
		// TODO Auto-generated method stub
		super.onBackPressed();
		finish();
	}
	
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		// TODO Auto-generated method stub
		super.onConfigurationChanged(newConfig);
		setUpViews();		
	}
	
	public void setUpViews(){
		setContentView(R.layout.activity_calculator__main);
		display = (TextView) findViewById(R.id.risultato);
        final Button uno = (Button) findViewById(R.id.uno);
        uno.setOnClickListener(this);
        final Button due = (Button) findViewById(R.id.due);
        due.setOnClickListener(this);
        final Button tre = (Button) findViewById(R.id.tre);
        tre.setOnClickListener(this);
        final Button quattro = (Button) findViewById(R.id.quattro);
        quattro.setOnClickListener(this);
        final Button cinque = (Button) findViewById(R.id.cinque);
        cinque.setOnClickListener(this);
        final Button sei = (Button) findViewById(R.id.sei);
        sei.setOnClickListener(this);
        final Button sette = (Button) findViewById(R.id.sette);
        sette.setOnClickListener(this);
        final Button otto = (Button) findViewById(R.id.otto);
        otto.setOnClickListener(this);
        final Button nove = (Button) findViewById(R.id.nove);
        nove.setOnClickListener(this);
        final Button zero = (Button) findViewById(R.id.zero);
        zero.setOnClickListener(this);
        final Button somma = (Button) findViewById(R.id.somma);
        somma.setOnClickListener(this);
        final Button sottrazione = (Button) findViewById(R.id.sottrazione);
        sottrazione.setOnClickListener(this);
        final Button prodotto = (Button) findViewById(R.id.prodotto);
        prodotto.setOnClickListener(this);
        final Button divisione = (Button) findViewById(R.id.divisione);
        divisione.setOnClickListener(this);
        final Button radq = (Button) findViewById(R.id.radq);
        radq.setOnClickListener(this);
        final Button potenza = (Button) findViewById(R.id.potenza);
        potenza.setOnClickListener(this);
        final Button uguale = (Button) findViewById(R.id.uguale);
        uguale.setOnClickListener(this);
        final Button virgola = (Button) findViewById(R.id.virgola);
        virgola.setOnClickListener(this);
        final Button c = (Button) findViewById(R.id.C);
        c.setOnClickListener(this);
        final Button ce = (Button) findViewById(R.id.CE);
        ce.setOnClickListener(this);
        final Button apriPar = (Button) findViewById(R.id.apriPar);
        apriPar.setOnClickListener(this);
        final Button chiudiPar = (Button) findViewById(R.id.chiudiPar);
        chiudiPar.setOnClickListener(this);
	}

}
